#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <functional>
#include <vector>

///////////////func////////////////////
void Sche()
{
    std::cout << "我是进程调度..." << std::endl;
}

void MemManger()
{
    std::cout << "我是周期性的内存管理, 正在检查是否有内存问题..." << std::endl;
}

void Fflush()
{
    std::cout << "我是刷新程序, 我在定期刷新内存数据到磁盘..." << std::endl;
}
///////////////func////////////////////

// 函数指针类型
using func_t = std::function<void()>;
std::vector<func_t> funcs; // 定义到容器里

// 每隔一秒完成一些任务
void handlerSig(int sig)
{
    std::cout << "#########################" << std::endl;
    for (auto f : funcs)
    {
        f();
    }

    std::cout << "#########################" << std::endl;

    int n = alarm(1); // 闹钟1s
}
int main()
{
    funcs.push_back(Sche);
    funcs.push_back(MemManger);
    funcs.push_back(Fflush);

    signal(SIGALRM, handlerSig);
    alarm(1); // 设定一个1秒的闹钟, 当前进程会受到一个 SIGALRM 信号

    while (true)
    {
        pause();
    }
}

// // 处理信号
// void handlerSig(int sig)
// {
//     std::cout << "获得了一个信号：" << sig << std::endl;
//     exit(13); // 设置退出码为13
// }
// int main()
// {
//     // 对信号捕捉
//     signal(SIGALRM, handlerSig);
//     alarm(1); // 设定一个1秒的闹钟, 当前进程会受到一个 SIGALRM 信号
//     int cnt = 0;

//     while (true)
//     {
//         std::cout << "count : " << cnt++ << std::endl;
//         cnt++;
//     }
// }

// // 处理信号
// void handlerSig(int sig)
// {
//     std::cout << "获得了一个信号：" << sig << std::endl;
//     exit(13); // 设置退出码为13
// }
// int main()
// {
//     // 对信号捕捉
//     for(int i = 1; i < 32; i++)
//         signal(i, handlerSig);
//     alarm(1); // 设定一个1秒的闹钟, 当前进程会受到一个 SIGALRM 信号
//     int cnt = 0;
//     while (true)
//     {
//         std::cout << "count : " << cnt++ << std::endl;
//         // sleep(1);
//     }

// }
